package com.example.d5_arrays;

import java.util.Arrays;
import java.util.Comparator;
import java.util.function.IntToDoubleFunction;

/**
 * 目标：掌握Arrays类的常用方法 - 操作数组的工具类
 */
public class ArraysTest1 {
    public static void main(String[] args) {
        // 1.public static String toString(类型[] arr): 返回数组的内容
        int[] arr = {10, 20, 30, 40, 50, 60};
        System.out.println(Arrays.toString(arr));

        // 2.public static 类型[] copyOfRange(类型[] arr, 起始索引, 结束索引) ：拷贝数组（指定范围,包前不包后）
        int[] arr2 = Arrays.copyOfRange(arr, 1, 4);
        System.out.println(Arrays.toString(arr2));

        // 3.public static copyOf(类型[] arr, int newLength)：拷贝数组,可以指定新数组的长度
        int[] arr3 = Arrays.copyOf(arr, 10);
        System.out.println(Arrays.toString(arr3));

        // 4.public static setAll(double[] array, IntToDoubleFunction generator)：把数组中的原数据改为新数据又存进去
        double[] prices = {99.8, 128, 100};
        //                  0     1    2
        // 把所有的价格都打八折,然后又存进去
        Arrays.setAll(prices, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) { // value表示数组元素的索引
                // value = 0  1  2
                return prices[value] * 0.8;
            }
        });
        System.out.println(Arrays.toString(prices));

        // 使用Lambda简化
        // Arrays.setAll(prices, value -> prices[value] * 0.8 );

        // 使用stream流实现
        // Arrays.stream(prices).map(price -> price * 0.8).forEach(System.out::println);

        // 5.public static void sort(类型[] arr)：对数组进行排序(默认是升序排序)
        Arrays.sort(prices);
        System.out.println(Arrays.toString(prices));

        // 如何使用Arrays工具类实现数组的降序排序
        // 如果是基本数据类型,像int double这种,需要先将他们转成对应的包装类,然后创建Comparator的匿名内部类指定比较规则
        Integer[] arr4 = {10, 20, 30, 40, 50, 60};
        // 使用Lambda简化
        Arrays.sort(arr4, (o1, o2) -> o2 - o1);
        /*Arrays.sort(arr4, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });*/
        System.out.println(Arrays.toString(arr4));
    }
}
